#ifndef BIO_PH_SPECIES_INCLUDED
#define BIO_PH_SPECIES_INCLUDED 1

#include "kernel/types.hpp"
#include "yocto/lua/lua-maths.hpp"

//! Information about a chemical species
class Species 
{
public:
	const string                name;  //!< species name
	const int                   Z;     //!< algebraic charge
	mutable Lua::Function<Real> SP;    //!< surface * permeability(zeta) in micron^3/s, default is 0
	mutable Real                Pf;    //!< permeability factor, to adjust Permeabilities, default is 1
	const size_t                idx;   //!< change by library insertion
	
	virtual ~Species() throw();
	explicit Species( const string & _name, int _z, lua_State *L, const string & _sp );
	Species( const Species & );
	
	
	const string & key() const throw(); //!< for yocto::set
		
	//! dlambda/dC
	Real omega( const Real zeta, const Real volume) const; //!< return characteristic time

	Real get_SP_times_Psi(Real zeta) const;
	
private:
	YOCTO_DISABLE_ASSIGN(Species);
};


#endif
